#include "sommet.h"
Sommet::Sommet()
{
	x = 0;
	y = 1;
	id = 0;
}


Sommet::Sommet(float x0, float y0, int id0)
{
	x = x0;
	y = y0;
	id = id0;
}

Sommet::Sommet(const Sommet& s)
{
	this->x = s.x;
	this->y = s.y;
	this->id = s.id;
	int delta = s.degre();
	for(int i=0; i<delta; i++)
	{
		this->voisins.push_back((s.voisins).at(i));
	}
}

Sommet::~Sommet(){voisins.clear();}

void Sommet::addVoisin(Sommet *s)
{
	voisins.push_back(s);
}

void Sommet::addAreteIncidente(Arete * a){
    this->aretes.push_back(a);
}

void Sommet::removeAreteIncidente(Arete *a){
    int index = 0;
    while (this->aretes[index] != a) index++;
    aretes.erase(aretes.begin()+index);
}

void Sommet::removeAreteIncidente(int index){
    aretes.erase(aretes.begin()+index);
}

void Sommet::removeVoisin(Sommet *s)
{
	int i=0;
	while(i<degre() && voisins[i]!=s) i++;
	voisins.erase(voisins.begin()+i);
}

void Sommet::removeVoisin(int i)
{
	voisins.erase(voisins.begin()+i);
}

void Sommet::clearVoisins()
{
	voisins.clear();
}

float Sommet::getX()const {return x;}
float Sommet::getY()const {return y;}
int Sommet::getId()const {return id;}
vector<Sommet*> Sommet::getVoisins()const {return voisins;}
vector<Arete*> Sommet::getAreteIncidente()const {return aretes;}
int Sommet::degre()const {return voisins.size();}
bool Sommet::estVoisin(Sommet *s){
    for (int i=0;i<this->getVoisins().size();i++){
        if (this->getVoisins()[i] == s )return true;
    }
    return false;
}
void Sommet::affiche()const 
{
       
}
void Sommet::afficheSV()const 
{
	cout<<"{"<<" x : "<<x<<","<<"y : "<<y<<","<<"id : "<<id<<"}"<<"Voisins ------> ";
	afficheVoisins();
	cout<<endl;
}
void Sommet::afficheVoisins()const 
{
	for (int i= 0 ;i<(int)voisins.size();i++)
	{cout<<voisins[i]->getId()<<" ,";}
}
Sommet Sommet::operator=(const Sommet& s)
{
	this->x = s.x;
	this->y = s.y;
	this->id = s.id;
	int delta = s.degre();
	for(int i=0; i<delta; i++)
	{
		this->voisins.push_back(s.voisins.at(i));
	}
	return *this;
}

bool Sommet::operator==(const Sommet& s)
{
	return this->id == s.id;
}

bool Sommet::operator!=(const Sommet& s)
{
	return !(*this==s);
}
